package search

import (
	"encoding/json"
	"os"
)

const dataFile = "dao/dao.json"

type Feed struct {
	Name string `json:"site"`
	URI  string `json:"link"`
	Type string `json:"type"`
}

func RetrieveFeeds() ([]*Feed, error) {
	//打开文件
	file, err := os.Open(dataFile)
	if err != nil {
		return nil, err
	}
	/*
		  当函数返回时关闭文件

		关键字 defer 会安排随后的函数调用在函数返回时才执行。在使用完文件后，需要主动关
		闭文件。使用关键字 defer 来安排调用 Close 方法，可以保证这个函数一定会被调用。哪怕函
		数意外崩溃终止，也能保证关键字 defer 安排调用的函数会被执行。关键字 defer 可以缩短打
		开文件和关闭文件之间间隔的代码行数，有助提高代码可读性，减少错误。
	*/
	defer file.Close()

	//将文件解码到一个切片里
	//这个切片的每一项是指向一个Feed类型的指针
	var feeds []*Feed
	err = json.NewDecoder(file).Decode(&feeds)

	// 这个函数不需要检查错误，调用者会做这件事
	return feeds, err
}
